home *** CD-ROM | disk | FTP | other *** search
- #include <simple.h>
- #include <Quickdraw.h>
- #include <pascal.h>
- #include <math.h>
- #include <ToolboxUtil.h>
- #include <OSUtil.h>
-
- int RECT[4]={290,240,310,512};
- double Trans[4][7];
- double xscale,xoffset,yscale,yoffset;
- int *Tptr;
- long int totiters,bits;
- static char *mdragon="Dragon Params/D";
- static char *mfern="Fern Params/F";
- static char *mspiral="Spiral Params/P";
- static char *msquare="Square Params/S";
- static char *mtree="Tree Params/R";
- static char *mtriangle="Triangle Params/T";
- static char *mitem;
-
- CursHandle c;
- WindowPtr windp;
-
- ifscompute()
- {
- extern int RECT[4];
- extern double Trans[4][7];
- extern long int totiters,bits;
- extern double xscale;
- extern double xoffset;
- extern double yscale;
- extern double yoffset;
-
- double x=0.0,y=0.0,temp=0.0;
- double newx,newy;
- int Probtrans[3];
- int xx,yy;
- int pk,k,n;
- int count=0,newbits=0;
- char out[255];
-
- withwindow ("IFS");
- ShowWindow(windowpoint("IFS"));
- SelectWindow(windowpoint("IFS"));
-
- TextSize(9);
- TextFont(4);
- TextFace(0);
- c=GetCursor(watchCursor);
- SetCursor(*c);
- randSeed=Time;
-
- for (n=0 ; n<=3 ; n++)
- {
- temp=Trans[n][6]+temp;
- Probtrans[n]=temp*32767;
- }
- for ( n=-20 ; n<=4999 ; n++)
- {
- pk=Random();
- if(pk<0) pk=-pk;
-
- if (pk<=Probtrans[0]) k=0;
- else if (pk<=Probtrans[1]) k=1;
- else if (pk<=Probtrans[2]) k=2;
- else k=3;
-
- newx=Trans[k][0]*x + Trans[k][1]*y + Trans[k][4];
- newy=Trans[k][2]*x + Trans[k][3]*y + Trans[k][5];
- x=newx;
- y=newy;
- if (n<0) continue;
- ++totiters;
- xx=(int) floor(0.5 + xoffset + xscale*x);
- if (xx<1) xx=1;
- if (xx>512) xx=512;
- yy=(int) floor(0.5 + yoffset + yscale*y);
- if (yy<1) yy=1;
- if (yy>312) yy=312;
- sprintf(out,"%d %d",xx,yy);
- newbits=newbits + (FALSE==GetPixel(xx,yy));
- MoveTo(xx,yy);
- LineTo(xx,yy);
- if (++count<500)
- continue;
- else
- {
- bits=bits+newbits;
- sprintf(out,"ITER =%6ld PIXELS =%6ld NEWPIX =%4d",totiters,bits,newbits);
- EraseRect(RECT);
- MoveTo(250,300);
- DrawString(CtoPstr(out));
- InvertRect(RECT);
- count=newbits=0;
- }
- }
- InitCursor();
- SysBeep(5);
- }
-
-
- extrainfo()
- {
- message("By A.P. Maika/ Written in Lightspeed C¬ by THINK Technologies Inc./ Written with the aid of SimpleTools⌐ by Eric Kilk 1986");
- }
-
- aboutme()
- {
- message ("Iterated Function System: see Barnsley, M.F., Sloan, A.D., 'A Better Way to Compress Images' BYTE (January 1988) 215-223");
- }
-
- counterreset()
- {
- bits=0;
- totiters=0;
- }
-
- setdragonvars()
- {
- static double dragon[4][7]={ {.0,-.5,.5,.0,-2.396462,.509384,.25},
- {.0,-.5,.5,.0,-.677228,-.866812,.25},
- {.0,-.5,.5,.0,.677228,.866812,.25},
- {.0,-.5,.5,.0,2.396462,-.509384,.25}};
- int i,j;
-
- windp=windowpoint("IFS");
- HideWindow(windp);
- ShowWindow(windp);
- for (i=0;i<=3;i++)
- {
- for (j=0;j<=6;j++)
- Trans[i][j]=dragon[i][j];
- }
- bits=0;
- totiters=0;
- xscale=40.0;
- xoffset=250.0;
- yscale=40.0;
- yoffset=150.0;
- menu("Commands",mitem,itemuncheck);
- mitem=mdragon;
- menu("Commands",mitem,itemcheck);
- }
-
- setfernvars()
- {
- static double fern[4][7]={ {.16,.0,.0,.0,.0,.0,.01},
- {.22,.23,-.26,.2,1.6,.0,.07},
- {.24,.26,.28,-.15,.44,.0,.07},
- {.85,-.04,.04,.85,1.6,.0,.85}};
- int i,j;
-
- windp=windowpoint("IFS");
- HideWindow(windp);
- ShowWindow(windp);
- for (i=0;i<=3;i++)
- {
- for (j=0;j<=6;j++)
- Trans[i][j]=fern[i][j];
- }
- bits=0;
- totiters=0;
- xscale=50.0;
- xoffset=-3.0;
- yscale=53.0;
- yoffset=130.0;
- menu("Commands",mitem,itemuncheck);
- mitem=mfern;
- menu("Commands",mitem,itemcheck);
- }
-
- setspiralvars()
- {
- static double spiral[4][7]={{-.164992,.164992,-.164992,-.164992,-5.2,5.2,.14},
- {.832299,.302932,-.302932,.832299,2.2,.9,.86},
- {.0,.0,.0,.0,.0,.0,.0},
- {.0,.0,.0,.0,.0,.0,.0}};
- int i,j;
-
- windp=windowpoint("IFS");
- HideWindow(windp);
- ShowWindow(windp);
- for (i=0;i<=3;i++)
- {
- for (j=0;j<=6;j++)
- Trans[i][j]=spiral[i][j];
- }
- bits=0;
- totiters=0;
- xscale=16.0;
- xoffset=200.0;
- yscale=16.0;
- yoffset=150.0;
-
- menu("Commands",mitem,itemuncheck);
- mitem=mspiral;
- menu("Commands",mitem,itemcheck);
- }
-
- setsquarevars()
- {
- static double square[4][7]={{.5,.0,.0,.5,.0,.0,.25},
- {.5,.0,.0,.5,.5,.0,.25},
- {.5,.0,.0,.5,.0,.5,.25},
- {.5,.0,.0,.5,.5,.5,.25}};
- int i,j;
-
- windp=windowpoint("IFS");
- HideWindow(windp);
- ShowWindow(windp);
- for (i=0;i<=3;i++)
- {
- for (j=0;j<=6;j++)
- Trans[i][j]=square[i][j];
- }
- bits=0;
- totiters=0;
- xscale=200.0;
- xoffset=155.0;
- yscale=200.0;
- yoffset=45.0;
- menu("Commands",mitem,itemuncheck);
- mitem=msquare;
- menu("Commands",mitem,itemcheck);
- }
-
- settreevars()
- {
- static double tree[4][7]={ {.0,.0,.0,.5,.0,.0,.05},
- {.1,.0,.0,.1,.0,.2,.15},
- {.42,-.42,.42,.42,.0,.2,.40},
- {.42,.42,-.42,.42,.0,.2,.40}};
- int i,j;
-
- windp=windowpoint("IFS");
- HideWindow(windp);
- ShowWindow(windp);
- for (i=0;i<=3;i++)
- {
- for (j=0;j<=6;j++)
- Trans[i][j]=tree[i][j];
- }
- bits=0;
- totiters=0;
- xscale=1000.0;
- xoffset=254.0;
- yscale=-800.0;
- yoffset=365.0;
-
- menu("Commands",mitem,itemuncheck);
- mitem=mtree;
- menu("Commands",mitem,itemcheck);
- }
-
- settrianglevars()
- {
- static double triangle[4][7]={ {.5,.0,.0,.5,.0,.0,.333},
- {.5,.0,.0,.5,1.,.0,.333},
- {.5,.0,.0,.5,.5,.5,.334},
- {.0,.0,.0,.0,.0,.0,.000}};
- int i,j;
-
- windp=windowpoint("IFS");
- HideWindow(windp);
- ShowWindow(windp);
- for (i=0;i<=3;i++)
- {
- for (j=0;j<=6;j++)
- Trans[i][j]=triangle[i][j];
- }
- bits=0;
- totiters=0;
- xscale=245.0;
- xoffset=5.0;
- yscale=270.0;
- yoffset=5.0;
- menu("Commands",mitem,itemuncheck);
- mitem=mtriangle;
- menu("Commands",mitem,itemcheck);
- }
-
- main ()
- {
- simpletools ("About IFS...");
- menu (applestring,"About IFS...", aboutme);
- menu (applestring, "About IFS...", itemenable);
- menu ("Edit","",itemdisable);
- simplequits();
- windmenu=FALSE;
- window ("IFS", 0, 38, 512, 342,stnop,counterreset,stnop,stnop);
- menu ("Commands","Extra Info",extrainfo);
- menu ("Commands","Iterate 5,000x/I",ifscompute);
- menu ("Commands",mdragon,setdragonvars);
- menu ("Commands",mfern,setfernvars);
- menu ("Commands",mspiral,setspiralvars);
- menu ("Commands",msquare,setsquarevars);
- menu ("Commands",mtree,settreevars);
- menu ("Commands",mtriangle,settrianglevars);
- mitem=mtriangle;
- settrianglevars();
- for (;;) simpleevents ();
- }
-